import axios from 'axios'
import { Message } from '_element-ui@2.13.2@element-ui';
import { getTimeStamp } from './auth'
import store from '@/store'
import router from '@/router'

const timeOut = 3600  // 定义超时时间


// 创建一个 axios  实例
const service = axios.create({
  // 在 .env.development 和 .env.production 设置的环境变量
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 10000 // request timeout  // 超时时间 10s/
})

// 请求拦截器
service.interceptors.request.use(config => {
   // 在这个位置需要统一的去注入token
  if (store.getters.token) {

    if (IsCheckTimeOut()) {
      // 进来就是超时了 重新去登录吧
      store.dispatch('user/logout') // 跳转登录页

      router.push('/login')
      return Promise.reject(new Error('token 超时了'));
    }
    // 如果token存在 注入token
    config.headers['Authorization'] = `Bearer ${store.getters.token}`
  }
  return config // 必须返回配置
}, error => {
  return Promise.reject(error)
})


// 响应拦截器
service.interceptors.response.use(response=>{
    // axios 默认加了一层 data  结构出来
  const { success, message, data } = response.data;
  // 根据 success 成功与否决定下面的操作
  if (success) {
    return data;
  } else {
    // 已经出错了 不让 接收成功的了
    Message.error(message);  // 提示错误信息 ，   ！！！！！！！！！！！！！！！！！！！！！ Message 上面自动引入了
    return Promise.reject(new Error(message));    // 返回一个错误
  }
}, err =>{
  Message.error(err.message) // 提示错误信息
  return Promise.reject(new Error(err.message));  // 返回一个错误 让调用直接进去 catch
})

// 判断是否超时
function IsCheckTimeOut() {
  let currentTime = Date.now();  // 获取当前时间戳
  let timeStamp = getTimeStamp(); // cookie 里面的时间戳

  return (currentTime - timeStamp) / 1000 > timeOut  // timeOut = 3600 一个小时
}

export default service
